/*
 * ! MultiUpload for xheditor @requires xhEditor
 * 
 * @author Yanis.Wang<yanis.wang@gmail.com> @site http://xheditor.com/ @licence
 * LGPL(http://www.opensource.org/licenses/lgpl-license.php)
 * 
 * @Version: 0.9.2 (build 100505)
 */
var swfu, selQueue = [], selectID, arrMsg = [], allSize = 0, uploadSize = 0;
function removeFile() {
	var file;
	if (!selectID)
		return;
	for (var i in selQueue) {
		file = selQueue[i];
		if (file.id == selectID) {
			selQueue.splice(i, 1);
			allSize -= file.size;
			swfu.cancelUpload(file.id);
			$('#' + file.id).remove();
			selectID = null;
			break;
		}
	}
	$('#btnClear').hide();
	if (selQueue.length == 0)
		$('#controlBtns').hide();
}
function startUploadFiles() {
	if (swfu.getStats().files_queued > 0) {
		$('#controlBtns').hide();
		swfu.startUpload();
	} else
		alert('上传前请先添加文件');
}
function setFileState(fileid, txt) {
	$('#' + fileid + '_state').text(txt);
}
function fileQueued(file)// 队列添加成功
{
	for (var i in selQueue)
		if (selQueue[i].name == file.name) {
			swfu.cancelUpload(file.id);
			return false;
		}// 防止同名文件重复添加
	if (selQueue.length == 0)
		$('#controlBtns').show();
	selQueue.push(file);
	allSize += file.size;
	$('#listBody').append('<tr id="' + file.id + '"><td>' + file.name
			+ '</td><td>' + formatBytes(file.size) + '</td><td id="' + file.id
			+ '_state">就绪</td></tr>');
	$('#' + file.id).hover(function() {
				$(this).addClass('hover');
			}, function() {
				$(this).removeClass('hover');
			}).click(function() {
				selectID = file.id;
				$('#listBody tr').removeClass('select');
				$(this).removeClass('hover').addClass('select');
				$('#btnClear').show();
			})
}
function fileQueueError(file, errorCode, message)// 队列添加失败
{
	var errorName = '';
	switch (errorCode) {
		case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED :
			errorName = "只能同时上传 " + this.settings.file_upload_limit + " 个文件";
			break;
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT :
			errorName = "选择的文件超过了当前大小限制：" + this.settings.file_size_limit;
			break;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE :
			errorName = "零大小文件";
			break;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE :
			errorName = "文件扩展名必需为：" + this.settings.file_types_description
					+ " (" + this.settings.file_types + ")";
			break;
		default :
			errorName = "未知错误";
			break;
	}
	alert(errorName);
}
function uploadStart(file)// 单文件上传开始
{
	setFileState(file.id, '上传中…');
}
function uploadProgress(file, bytesLoaded, bytesTotal)// 单文件上传进度
{
	var percent = Math.ceil((uploadSize + bytesLoaded) / allSize * 100);
	$('#progressBar span').text(percent + '% ('
			+ formatBytes(uploadSize + bytesLoaded) + ' / '
			+ formatBytes(allSize) + ')');
	$('#progressBar div').css('width', percent + '%');
}
function uploadSuccess(file, serverData)// 单文件上传成功
{
	var data = Object;
	try {
		eval("data=" + serverData);
	} catch (ex) {
	};
	if (data.err != undefined && data.msg != undefined) {
		if (!data.err) {
			uploadSize += file.size;
			arrMsg.push(data.msg);
			setFileState(file.id, '上传成功');
		} else {
			setFileState(file.id, '上传失败');
			alert(data.err);
		}
	} else
		setFileState(file.id, '上传失败！');
}
function uploadError(file, errorCode, message)// 单文件上传错误
{
	setFileState(file.id, '上传失败！');
}
function uploadComplete(file)// 文件上传周期结束
{
	if (swfu.getStats().files_queued > 0)
		swfu.startUpload();
	else
		uploadAllComplete();
}
function uploadAllComplete()// 全部文件上传成功
{
	callback(arrMsg);
}
function formatBytes(bytes) {
	var s = ['Byte', 'KB', 'MB', 'GB', 'TB', 'PB'];
	var e = Math.floor(Math.log(bytes) / Math.log(1024));
	return (bytes / Math.pow(1024, Math.floor(e))).toFixed(2) + " " + s[e];
}